<html>
    <head>
        <title>让第二数据库的迁移实现自动化  </title>
    </head>
    <body>
        <script>
            /*
                 4、让第二数据库的迁移实现自动化  

                                                .DbMigrator控制台应用程序可以跨多个数据库运行数据库种子代码,，无需任何额外配置。

                                                但是，它不能为BookStoreSecondDbContext的数据库应用EF Core Code First Migrations。

                                                现在，你将看到如何配置控制台迁移应用程序来处理这两个数据库。

                                                EntityFrameworkCoreBookStoreDbSchemaMigrator是在Acme.BookStore.EntityFrameworkCore项目中的类，
                                                
                                                负责迁移BookStoreMigrationsDbContext的数据库模式。应该是这样的：

                                                            using System;
                                                            using System.Threading.Tasks;
                                                            using Microsoft.EntityFrameworkCore;
                                                            using Microsoft.Extensions.DependencyInjection;
                                                            using BookStore.Data;
                                                            using Volo.Abp.DependencyInjection;

                                                            namespace BookStore.EntityFrameworkCore
                                                            {
                                                                public class EntityFrameworkCoreBookStoreDbSchemaMigrator
                                                                    : IBookStoreDbSchemaMigrator, ITransientDependency
                                                                {
                                                                    private readonly IServiceProvider _serviceProvider;

                                                                    public EntityFrameworkCoreBookStoreDbSchemaMigrator(
                                                                        IServiceProvider serviceProvider)
                                                                    {
                                                                        _serviceProvider = serviceProvider;
                                                                    }

                                                                    public async Task MigrateAsync()
                                                                    {
                                                                        // We intentionally resolving the BookStoreDbContext
                                                                        // from IServiceProvider (instead of directly injecting it)
                                                                        // to properly get the connection string of the current tenant in the
                                                                        // current scope.

                                                                        await _serviceProvider
                                                                            .GetRequiredService<BookStoreDbContext>()
                                                                            .Database
                                                                            .MigrateAsync();
                                                                    }
                                                                }
                                                            }

                                                在MigrateAsync方法中添加以下代码：

                                                            await _serviceProvider
                                                                                .GetRequiredService<BookStoreSecondDbContext>()
                                                                                .Database
                                                                                .MigrateAsync();

                                                因此，MigrateAsync方法应如下所示：
                                                                            
                                                            public async Task MigrateAsync()
                                                            {
                                                                // We intentionally resolving the BookStoreDbContext
                                                                    * from IServiceProvider (instead of directly injecting it)
                                                                    * to properly get the connection string of the current tenant in the
                                                                    * current scope.

                                                                await _serviceProvider
                                                                    .GetRequiredService<BookStoreDbContext>()
                                                                    .Database
                                                                    .MigrateAsync();

                                                                await _serviceProvider
                                                                    .GetRequiredService<BookStoreSecondDbContext>()
                                                                    .Database
                                                                    .MigrateAsync();
                                                            }

                                                就是这么简单。你现在可以运行.DbMigrator应用程序来迁移和播种数据库。

                                                要进行测试话，可以删除两个数据库并再次运行.DbMigrator应用程序以查看它是否创建了两个数据库。


            */
        </script>
    </body>
</html>